Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Error όταν καλώ μέθοδο σε web service

Îåêßíçóå áðü ôï ìÝëïò Wizard!. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 19-03-2008, 11:31. Υπάρχουν 14 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  14-03-2008, 13:47 40847

    Error όταν καλώ μέθοδο σε web service

    Καλησπέρα σε όλους. Αντιμετωπίζω ένα περίεργο πρόβλημα. Σε ένα project (VS2005) έχω δύο web references για δύο αντίστοιχα services. Είναι στον ίδιο server, στο ίδιο folder, με τις ίδιες ρυθμίσεις. Η μόνη διαφορά που έχουν είναι τα αρχεία asmx.

    Προσπαθώντας να καλέσω μιά μέθοδο από το 2ο, παίρνω το παρακάτω σφάλμα:
    mscorlib at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet)
    at System.Security.CodeAccessPermission.Demand()
    at System.Net.HttpWebRequest..ctor(Uri uri, ServicePoint servicePoint)
    at System.Net.HttpRequestCreator.Create(Uri Uri)
    at System.Net.WebRequest.Create(Uri requestUri, Boolean useUriBase)
    at System.Net.WebRequest.Create(Uri requestUri)
    at System.Web.Services.Protocols.WebClientProtocol.GetWebRequest(Uri uri)
    at System.Web.Services.Protocols.HttpWebClientProtocol.GetWebRequest(Uri uri)
    at System.Web.Services.Protocols.SoapHttpClientProtocol.GetWebRequest(Uri uri)
    at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
    at STAllocationService.STXMLAllocation.AllocationSearchForOL7(String pXML)
    in C:\STOnline_DNN_04.05.05\STOnline\Web References\STAllocationService\Reference.vb:line 181
    at Specialtours.DNN.STOnline.Common.DataAccess.SearchAllocation(Hashtable hashData)
    in C:\STOnline_DNN_04.05.05\STOnline\DataAccess.vb:line 185

    Τι μπορεί να φταίει? Στο 1ο service όλα δουλεύουν κανονικά. Έχω ρυθμίσει την ασφάλεια στο .ΝΕΤ ώστε να είναι fully trusted o client.
    Δημοσίευση στην κατηγορία:
  •  14-03-2008, 16:50 40859 σε απάντηση της 40847

    Απ: Error όταν καλώ μέθοδο σε web service

    Τα δύο WebMethods έχουν τον ίδιο κώδικα; Γιατί το ότι είναι στον ίδιο server, στο ίδιο folder και με τις ίδιες ρυθμίσεις δεν λέει και πολλά αν δέχονται διαφορετικές παραμέτρους, επιστρέφουν διαφορετικά πράγματα και κάνουν διαφορετικά πράγματα. Όπως και να έχει, μπορείς να κάνεις debug στον κώδικα του web service να δεις καταρχήν αν εκτελείται κανονικά ο κώδικας της web method.


    Vir prudens non contra ventum mingit
  •  14-03-2008, 18:20 40862 σε απάντηση της 40859

    Απ: Error όταν καλώ μέθοδο σε web service

    Tα services είναι φτιαγμένα από άλλους από τα οποία τραβάμε δεδομένα. Η παράμετρος που παίρνουν είναι XML κι επιστρέφουν XML.
    Αν κάνω HTTPPOST, παίζει κανονικά. Όταν εκτελώ τη μέθοδό του, με web reference, παίρνω αυτό το σφάλμα. Από την ίδια κλάση, με τον ίδιο τρόπο, καλώ το άλλο, το οποίο δουλεύει άριστα. Πρακτικά η μόνη διαφορά στα δύο, είναι το reference και το όνομα της μεθόδου... Confused
  •  14-03-2008, 22:38 40864 σε απάντηση της 40862

    Απ: Error όταν καλώ μέθοδο σε web service

    Ποια είναι τα URL για τα δύο web services; Θα βοηθούσε επίσης αν επεσύναπτες τα Reference.vb των δύο web references.
    Νατάσα Μανουσοπούλου
  •  17-03-2008, 09:48 40907 σε απάντηση της 40864

    Απ: Error όταν καλώ μέθοδο σε web service

    Νατάσα καλημέρα και καλή εβδομάδα. Πως μπορώ να επισυνάψω ένα αρχείο με τα references μήπως και δεις κάτι που δε βλέπω? Δεν έχω κάποιο link κατά το post που να επιτρέπει attachements. Διεύθυνση και να σου δώσω, δε θα μπορείς να τα δείς, γιατί είνα κλειδωμένα με clientIP και δεν είναι προσβάσιμα από όλους.
  •  17-03-2008, 09:57 40908 σε απάντηση της 40907

    Απ: Error όταν καλώ μέθοδο σε web service

    Όταν απαντάς σε μια δημοσίευση βλέπεις ότι έχεις διάφορα tabs ακριβώς πάνω από το κείμενο στο οποίο κάνεις απάντηση. Το δεύτερο tab είναι η επιλογές. Σε αυτό υπάρχει κουμπί για file attachment

    Manos
  •  17-03-2008, 11:00 40912 σε απάντηση της 40908

    Απ: Error όταν καλώ μέθοδο σε web service

    Συνημμένα: Web References.rar
    Το είδα, αλλά πρόσεξα μόνο τα emoticons... Δευτέρα πρωι, χωρίς καφέ τι περιμένεις...? Embarrassed
  •  18-03-2008, 14:43 40953 σε απάντηση της 40912

    Απ: Error όταν καλώ μέθοδο σε web service

    Επειδή πρέπει κάποια στιγμή να τελειώσει, άφησα τη μέθοδο του WebReference και δοκίμασα να το κάνω με HttpWebRequest, ακόμα και με το παλιό, κλασσικό, HTTPPost... Τα ίδια και στις 3 περιτπώσεις!!! Μέσα από την ίδια κλάση, πάλι από custom control, καλώ άλλο service και παίζει άριστα! Το πρόβλημα έχει αυτό?

    Ο κώδικας στην 1η περίπτωση είναι αυτός και χτυπάει στο request (γραμμή 16):
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
          Dim httpRequest As Net.HttpWebRequest
          Dim httpResponse As Net.HttpWebResponse
          Dim queryStream As IO.Stream
          Dim myUri As Uri
          Dim ByteQuery() As Byte
          Dim sQuery As String
          Dim iStatCode As Integer
          Dim sStatus, sText, ret As String
          Dim strm As IO.Stream
          Dim sr As IO.StreamReader


          sQuery = OLParamName & strXML

          myUri = New System.Uri(OLAllocationPath)
          httpRequest = CType(Net.WebRequest.Create(myUri), Net.HttpWebRequest)


    Στη 2η περίπτωση, χτυπάει κατευθείαν στον ορισμό είτε με τον 1ο τρόπο, είτε με το 2ο:
    1
    2
    3
    Dim httpRequest As New MSXML2.XMLHTTP 

    Dim httpReq2 As New MSXML.XMLHTTPRequest

    Τι μπορεί να φταίει???

  •  18-03-2008, 15:34 40957 σε απάντηση της 40953

    Απ: Error όταν καλώ μέθοδο σε web service

    Ψάχνεις και ξαναψάχνεις τον client κώδικα ενώ το πρόβλημα μπορεί να βρίσκεται στο Web Service. Μήπως με το που φτιάχνει το instance και γίνεται initialize τρέχει κάποιο κώδικα που το crashάρει; Τα υπόλοιπα web methods στο προβληματικό web service παίζουν; To έχεις δει καθόλου να παίζει; Από άλλο project; Από άλλον υπολογιστή; Μήπως έχεις κανένα πρόβλημα με την εγκατάσταση του studio και δεν γίνεται σωστό code generation...


    Vir prudens non contra ventum mingit
  •  18-03-2008, 15:52 40958 σε απάντηση της 40957

    Απ: Error όταν καλώ μέθοδο σε web service

    Γενικά όλες οι μέθοδοι στο service παίζουν με απλή κλήση από IE. Χρησιμοποιείται καθημερινά από χιλιάδες χρήστες. Το service δεν έχει πρόβλημα.
    Εγώ ο ίδιος, από απλή σελίδα .ΝΕΤ 2.0, το καλώ με httpPost χωρίς πρόβλημα. Μεγάλο μέρος του κώδικα είναι αντιγραφή από την απλή σελίδα και ενσωματώνεται σε άλλο project. Δε νομίζω ότι μπορώ να συμφωνήσω στο ότι φταίει το service, ειδικά τη στιγμή που χτυπάει στο Dim oXMLHTTP As New MSXML.XMLHTTPRequest
  •  18-03-2008, 22:50 40969 σε απάντηση της 40958

    Απ: Error όταν καλώ μέθοδο σε web service

    To ότι παίζουν με απλή κλήση από τον IE δεν λέει κάτι. Όταν παίξεις με τα proxies που φτιάχνει το Visual Studio τότε (τουλάχιστον στο .NET 2.0) παίζεις με SOAP over HTTP. Επίσης, όταν λες ότι παίζουν οι μέθοδοι με Post, πώς περνάς τo XML input που χρειάζεται ως παράμετρο ώστε να επιβεβαιώσεις ότι παίζουν σωστά; Ως προς το Dim oXMLHTTP As New MSXML.XMLHTTPRequest αυτό πάλι πώς σχετίζεται με το web service;


    Vir prudens non contra ventum mingit
  •  19-03-2008, 00:17 40970 σε απάντηση της 40969

    Απ: Error όταν καλώ μέθοδο σε web service

    Το αρχικό error message τα λέει όλα. Δεν έχεις permission να καλέσεις το URL που χρησιμοποιείς. Μπορεί ο client να είναι asp.net εφαρμογή και να τρέχει σε partial trust, μπορεί να υπάρχει στον κώδικα σου κάποιο Deny, μπορεί να συμβαίνει κάτι άλλο, αλλά ο client δεν έχει δικαίωμα να καλέσει το URL που χρησιμοποιείς. Δεν έχει νόημα να προσπαθείς να καλέσεις το web service με περίεργους τρόπους (τί δουλειά έχει το XMLHTTPRequest ?) αλλά δεν θα βοηθήσει. Καλό θα είναι να μας πεις τί είναι ο client και να δώσεις ολόκληρο το error message, καθώς είναι φανερό ότι λείπει τουλάχιστον το κομμάτι που αναφέρεται στο SecurityException ενώ πρέπει να λείπουν και άλλα πράγματα.

    Ψάχνοντας στο Google θα δεις ότι και άλλοι έχουν αυτό το πρόβλημα που και που όταν δουλεύουν σε partial trust περιβάλλοντα, συνήθως όταν η εφαρμογή τους είναι ASP.NET application ή Web service που καλεί άλλο web service.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  19-03-2008, 10:51 40976 σε απάντηση της 40970

    Απ: Error όταν καλώ μέθοδο σε web service

    Παναγιώτης Καναβός:

    Το αρχικό error message τα λέει όλα. Δεν έχεις permission να καλέσεις το URL που χρησιμοποιείς. Μπορεί ο client να είναι asp.net εφαρμογή και να τρέχει σε partial trust, μπορεί να υπάρχει στον κώδικα σου κάποιο Deny, μπορεί να συμβαίνει κάτι άλλο, αλλά ο client δεν έχει δικαίωμα να καλέσει το URL που χρησιμοποιείς. Δεν έχει νόημα να προσπαθείς να καλέσεις το web service με περίεργους τρόπους (τί δουλειά έχει το XMLHTTPRequest ?) αλλά δεν θα βοηθήσει. Καλό θα είναι να μας πεις τί είναι ο client και να δώσεις ολόκληρο το error message, καθώς είναι φανερό ότι λείπει τουλάχιστον το κομμάτι που αναφέρεται στο SecurityException ενώ πρέπει να λείπουν και άλλα πράγματα.

    Ψάχνοντας στο Google θα δεις ότι και άλλοι έχουν αυτό το πρόβλημα που και που όταν δουλεύουν σε partial trust περιβάλλοντα, συνήθως όταν η εφαρμογή τους είναι ASP.NET application ή Web service που καλεί άλλο web service.


    Παναγιώτη, σωστά όλα αυτά που λες, απλά δε μπορώ να καταλάβω γιατί έχω permitions να καλέσω το www.server.com/service1.asmx ενώ δεν έχω για το www.server.com/service2.asmx.

    KelMan:
    Ως προς το Dim oXMLHTTP As New MSXML.XMLHTTPRequest αυτό πάλι πώς σχετίζεται με το web service;

    Απλά έκανα δοκιμή με κάθε τρόπο που ήξερα να δω αν θα παίξει... :) Το περίεργο όμως είναι, γιατί έβγαζε security error στο Dim...?

    Η λύση πάντως βρέθηκε, αν και δε θα έπρεπε να είναι εκεί (πιστεύω...)
    Στο web.config υπήρχε αυτή η γραμμή commented:
    <trust level="Medium" originUrl=".*" />
    Θεώρησα ότι αφού είναι commented κι αφού στο machine.config θα έπρεπε να υπάρχει η αντίστοιχη με Full trust, αφού το είχα ρυθμίσει από το .ΝΕΤ Configuration, δε θα έπαιζε ρόλο.
    Την έκανα uncomment, την άλλαξα σε
    <trust level="Full" originUrl=".*" />
    και τώρα παίζει απροβλημάτιστα με όλους τους τρόπους Smile

    Ευχαριστώ για τη βοήθεια και το χρόνο σας Yes
  •  19-03-2008, 11:16 40977 σε απάντηση της 40976

    Απ: Error όταν καλώ μέθοδο σε web service

    Wizard:
    Παναγιώτη, σωστά όλα αυτά που λες, απλά δε μπορώ να καταλάβω γιατί έχω permitions να καλέσω το www.server.com/service1.asmx ενώ δεν έχω για το www.server.com/service2.asmx.

    Το security μοντέλο στο .NET είναι evidence based, δηλαδή το τι επιτρέπεται και το τι δεν επιτρέπεται να κάνει ένα κομμάτι κώδικα εξαρτάται από κριτήρια όπως ποιός τρέχει τον κώδικα (κάτω από ποιό account), που βρίσκεται ο κώδικας (local, intranet, internet) και τι προσπαθεί να κάνει ο κώδικας. Γι αυτό σου είπα ότι δεν παίζει ρόλο το ότι τρέχει το πρώτο service. Το δεύτερο μπορεί να κάνει διαφορετικά πράγματα που να απαιτούν περισσότερα δικαιώματα και καθώς δεν υπάρχουν να γυρίζει exception.


    Vir prudens non contra ventum mingit
  •  19-03-2008, 11:31 40978 σε απάντηση της 40976

    Απ: Error όταν καλώ μέθοδο σε web service

        Και όμως αυτό ήταν το πρόβλημα από την αρχή και αυτό λέει το Error Message! Αν δεν ορίσεις ξεκάθαρα το trust level για μία εφαρμογή θα εφαρμοστεί το default για το μηχάνημα, το οποίο προφανώς ΔΕΝ είναι το Full Trust και δεν επιτρέπει να κληθεί οποιοδήποτε URL. Όσο για το error στο Dim μάλλον δεν έχεις ορίσει τα κατάλληλα permissions για να εκτελέσεις COM αντικείμενα. Το MSXML είναι ένα COM αντικείμενο.

       Γενικά, όταν έχεις ένα περίεργο πρόβλημα σχεδόν πάντα η λύση είναι πολύ πιο απλή απ' ότι πιστεύεις. Σχεδόν πάντα, το πρόβλημα είναι του προγραμματιστή και όχι του Framework. Είναι απαραίτητο να απομονώσεις το πρόβλημα από την υπόλοιπη εφαρμογή, φτιάχνοντας μία νέα dummy εφαρμογή η οποία κάνει μόνο αυτό που πιστεύεις ότι δημιουργεί το πρόβλημα, με όσο το δυνατόν λιγότερες παρεμβάσεις. Αν το πρόβλημα εμφανιστεί πάλι, θα είναι πολύ πιο εύκολο να το λύσεις. Αλλιώς, ξέρεις ότι το πρόβλημα δεν είναι εκεί πού νόμιζες.
      Στην περίπτωση σου θα έπρεπε να φτιάξεις μία καθαρή εφαρμογή WinForms ή ASP.NET (ακόμα δεν μας είπες τί έφτιαξες στην αρχή! Έπρεπε να το μαντέψω από το ότι χρησιμοποιείς το web.config!) με ένα Web Reference στο Service και μία κλήση σε αυτό. Η κλήση αυτή θα πετύχαινε οπότε θα ήξερες ότι το πρόβλημα βρίσκεται κάπου αλλού στην εφαρμογή σου, όχι στα Web References ή τα Web Services. Μετά, θα άρχιζες να συγκρίνεις τα web.config και αν αυτό δεν έλυνε το πρόβλημα να αρχίσεις να προσθέτεις κώδικα από την κυρίως εφαρμογή στην dummy μέχρι να βρεις τί φταίει.

    Ακούγεται σαν το CSI:Miami, αλλά και αυτό είναι κομμάτι του προγραμματισμού. Αν δεν δώσεις όλα τα σημαντικά στοιχεία, αν δεν προσέξεις τα στοιχεία που έχεις και αν δεν απομονώσεις το πρόβλημα, δεν βγάζεις άκρη ποτέ.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems